package org.xqp.hrm.service.impl;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.xqp.hrm.domain.Login;
import org.xqp.hrm.mapper.LoginMapper;
import org.xqp.hrm.mapper.MealMapper;
import org.xqp.hrm.service.ILoginService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.xqp.hrm.service.IMealService;

/**
 * <p>
 * 登录表 服务实现类
 * </p>
 *
 * @author xqp
 * @since 2021-11-22
 */
@Service
public class LoginServiceImpl extends ServiceImpl<LoginMapper, Login> implements ILoginService {

    @Autowired
    private IMealService mealService;

    @Override
    @Transactional(rollbackFor = {Exception.class}) // 事务里的rollbackFor = {Exception.class}意思是遇到异常直接回滚
    public Login saveLoginAndMeal(Login login, Long mealId) {
        /**
         * 防御性编程 传过来的参数要进行非空判断
         */
        if (StringUtils.isEmpty(login.getUsername())){
            throw new RuntimeException("用户名不能为空");
        }
        if (StringUtils.isEmpty(login.getPassword())){
            throw new RuntimeException("密码不能为空");
        }
        if (mealId == null){
            throw new RuntimeException("套餐不能为空");
        }
        // 保存Login  为了信息安全 用户只能设置Login的用户名和密码以及type其他的都要使用我们的默认值
        // 进行默认值设置
        login.setEnabled(true);// 设置账户是否启用
        login.setAccountNonExpired(true);
        login.setAccountNonLocked(true);
        login.setCredentialsNonExpired(true);
        // 默认值设置完了所有的Login数据保存到数据库并返回主键id
        baseMapper.insert(login);
        //获取Login的id
        Long loginId = login.getId();
        // 保存Login和套餐的中间表
        mealService.saveRelationWithLogin(mealId, loginId);
        return login;
    }
}
